LuxSum 5 南京大学开放日

LuxSum 5 南京大学开放日

七月 15, 2019

cover

7月11日参加了南大的开放日活动(南京市本地高校提前举行),即暑期夏令营,感觉不错且最终拿到了offer,这里做些记录。

面试

中午去报道下午面试,我抽到好像是E8,一直等到三点后才开始面试。事实证明一个靠后的位置还是有利的,看到很多朋友很失望的回来,一方面可以和他们交流一下面试题(临时预习),一方面也可以根据情况做些自我调节,避免犯下相似的错误。

南大的面试形式就是简单的一对三面试,三位老师据我猜测应该是不同方向/组的助理研究员/讲师,面我的三位老师据我的猜测结合后期实证分别为:

  • A:cosec组(计算机网络与协助)助理研究员,研究深度学习相关安全和隐私保护问题,后来联系了我;
  • B:据推测应该是研究数据语言自动机相关(问了我编译原理相关问题);
  • C(主面试官?C位):lans组(先进网络与数据科学)助理研究员,研究分布式计算数据挖掘等方面,给了我简历。

一开始让做中文自我介绍,然后开始了一波提问:

  • A问:
    • caffe的作者是谁?
    • **【英文问题】**简单介绍一下你的第一个项目(深度学习去雾)
    • 介绍resnet原理
    • 介绍faster-rcnn原理
  • B问:
    • dfanfa的区别
    • nfadfa如何转化?
  • C问:
    • 链表如何判环?
    • **【拓展题】**大规模流数据如何等概率sample k个数?

这里除了最后一个拓展题其他基本都答上来了,这里说下几个细节:

  • 由于准备了很久的英文自我介绍没反应过来,突然让做中文自我介绍,愣了很久才勉强把英文的翻译了一遍;

  • 一开始看见A在我简历靠上方部分勾勾画画,大概知道他要问什么了——结果一上来问我“看见你会用caffe搭网络,那你知道caffe的作者是谁吗?”,一脸懵逼啊。太长时间没搞深度学习也忘记贾教主大名了,就只能说只记得好像是他的博士论文;

  • 让我介绍一下第一个项目(深度学习项目)的时候。由于事先准备了这个问题(背了一篇论文introduction部分😂),就直接问老师能否用英文回答此问题,结果老师A直接说可以把此问题当作英文问题(运气好运气好),于是非常流利地介绍了行业背景和我们的一些工作;

  • 中间几个问题答得非常舒服,数据结构问题答得也飞快(感谢一下LeetCode),于是C老师就说“看你这些问题都会,干脆问你一个难的好了”,然后就问了我那个拓展题。当时注意到流数据三个字马上反应过来老师是做云计算分布式计算的就拼命往mapreduce原理那里去想答案,没有注意到这本质是一个概率trick题。反正想了几分钟就让我走了,还说几分钟没想出来肯定想不出来的,😰。

总之面试很是舒服,留下了我的简历也get了主面试官的简历,第二天接到了A的电话约了我一波,还说好几个老师都想要我肯定会给我打电话导致我等了好久并未再接到任何电话(疑似被鸽😓)。

从别人那了解到大概还问了以下问题:

  • 编译原理相关
  • 计算机网络相关(主要结构和TCP?)
  • 大规模数据如何外排

机试

其实一直都比较慌机试,因为过往个人竞赛都发挥较差,给我留下了不小的心理阴影。带着点ACM的底子,加上之前刷了几天LeetCode(见之前Blog)练手,战战兢兢去机试。

题目

南大机试是晚上6:30到8:30,两个小时做三道题,按测试点给分,题目如下:

  1. 给定一个由圆括号()和方括号[]组成的字符串,定义其值为:

    • ()[]值为1
    • (x)值为2*x
    • [x]值为x+1
    • 括号不匹配值为-1

    给定字符串求值结果(没有数据范围)。

  2. 给定一个数组,该数组的每个值对应其可以跳转到的值的索引(例Ai=2表示可以跳转到i=2位置),这里要求从第一个位置跳转到最后一个位置,每次给你三种操作:

    • 直接按值跳转
    • 当前值加一
    • 当前值减一

    求到达最终位置的最少操作次数。

  3. 给定m本书的价格以及拥有的n元,求出n元可以买到最多本书的组合的数量,每本书数量只有一本。

    例有三本书每本书价格分别为2、3、3,有5元钱,可以买到(0号书,1号书)和(0号书,2号书)两种使得书数量最多的组合。

题解

  1. 解法一:栈模拟(100分)

    解法二:DFS(90分)

  2. BFS(90分)

  3. 解法一:背包(100分)

    解法二:DFS(100分)

思路与细节

一上来感觉题目都不是很好做,以为第一题是某种DP(回忆起了被区间DP括号DP支配的恐惧),第二题没太看懂,于是便老老实实暴力去撸第三题。压根没想第三题的DP写法(也可能是这天比较冲动,只想得到DFS写法😪),反正一看第三题便感觉是某种非常熟悉的DFS啊,于是上手写。当时代码好像有点毛病,导致某些结果居然被搜出了两次,硬是Debug了很久没发现错误,感觉有点慌的时候直接上set改改就交了,没想到A了,非常舒服。这里感谢只有十组样例啊,因为总感觉代码哪里有问题,而且写法也很暴力。

接近40分钟才撸完第三题,这个时候还是没看出第二题想表达什么,就去推第一题了。以为第一题是DP,结果推了半天发现DP的话复杂度要比直接栈模拟高得多啊,再结合第三题暴力给我的信心,决定再写一个DFS莽了它。实际上DFS很好写,遇到[直接返回1和下一个字符搜索的结果,遇到(特判右边是否是)的情形再做相似处理,遇到]返回下一个字符搜索的结果。最后很少见的代码无错,直接90分。(想了想DFS写法似乎也是线性复杂度,最后一个样例不应该超时,可能是有逻辑错误,不过90分完全可以接受就不管这些直接去写第二题了。)

这个时候大概过去了1个小时,当时对第二题还是很有信心的,毕竟时间充裕,分数也基本够了,于是就开始犯傻了。第二题实际上只要对状态进行分析,三个操作当成状态转移的路线即可。当时也画出了状态图,于是思维惯性地开始了DFS(😰),反反复复调试提交只有20分,一直没反应过来dfs只往最先的分支递归的问题直接用bfs解决即可(一年未写过bfs,真的忘了这一茬)。浑浑噩噩地结束了考试。

面谈

第二天(12号)和两个老师谈了谈,这里简略说说。

13:30和面试官A老师约了个会议室面谈。A老师表现的真的很真诚,详细介绍了他们实验室和他做的方向,也和我介绍了下深度学习方面安全和隐私可以做的工作。开诚布公,谈得很舒服。

感觉拿到一个offer之后信心倍增,之后直接去找意向老师王老师硬刚。结果一上来王老师对着我的简历说介绍一下PSMNet。我懵了,猜了一个PSMNet的全称又水了几句,然后老师直接当场谷歌”对峙“,有点尴尬,还是厚着脸皮解释了下对这个工作不是很熟悉但是对这个方向做了点综述工作,对主要工作有点了解。然后王老师又指着简历上的faster-rcnn说介绍下原理,只知道一点基础结构并靠这些混过昨天面试的我再次懵逼,然后被怼说现在的学生只知道掉包不知算法,导致论文很水巴拉巴拉。再次尴尬,于是厚着脸皮说我也觉得很水,并且我感觉我们实验室这种现象有点严重,所以我希望在老师指导下从算法和基础原理做起巴拉巴拉(😈)。反正吹了很久的水,自我感觉良好,之后再反思却感觉表现一般。14号再来找老师签字被告知人很多不能保证进组,感觉基本凉凉。

总结

  • 面试掌握主动权很重要,关键是要充满自信;
  • 多次竞赛经历还是帮助了我,机试依靠熟练的DFS技能”DFS三板斧“(大雾)结束了战斗,DFS天下第一(但是不能忘了BFS)!
  • 必须保证对简历上的每一个字和单词都有充分了解,否则不要写上去!
  • 面试被问到的问题面试后应该尽快review,以免连续被问倒的惨剧发生(面谈前一个晚上从线代到概率论到深度学习基础准备了很多,唯独没有复习faster-rcnn,悲剧)!